package com.zfy.im.server;

import com.zfy.im.common.CommandStat;
import com.zfy.im.common.ImPacket;
import com.zfy.im.common.ImSessionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tio.core.ChannelContext;
import org.tio.core.GroupContext;
import org.tio.server.intf.ServerAioListener;

/**
 * @author tanyaowu
 */
public class ImServerAioListener implements ServerAioListener<ImSessionContext, ImPacket, Object> {
    @SuppressWarnings("unused")
    private static Logger log = LoggerFactory.getLogger(ImServerAioListener.class);

    /**
     * @author: tanyaowu
     * 2016年12月16日 下午5:52:06
     */
    public ImServerAioListener() {
    }

    /**
     * @param args
     * @author: tanyaowu
     * 2016年12月16日 下午5:52:06
     */
    public static void main(String[] args) {
    }

    /**
     * @param asynchronousSocketChannel
     * @param aioServer
     * @return
     * @author: tanyaowu
     * 2016年12月20日 上午11:03:45
     * @see ServerAioListener#onAfterAccepted(java.nio.channels.AsynchronousSocketChannel, org.tio.server.AioServer)
     */
//	@Override
//	public boolean onAfterAccepted(AsynchronousSocketChannel asynchronousSocketChannel, AioServer<ImSessionContext, ImPacket, Object> aioServer)
//	{
//		return true;
//	}
    @Override
    public void onAfterConnected(ChannelContext<ImSessionContext, ImPacket, Object> channelContext, boolean isConnected, boolean isReconnect) {
        ImSessionContext imSessionContext = new ImSessionContext();
        channelContext.setSessionContext(imSessionContext);
        System.out.println("连接完成");
        return;
    }

    /**
     * @param channelContext
     * @param packet
     * @author: tanyaowu
     * 2016年12月20日 上午11:08:44
     * @see org.tio.core.intf.AioListener#onBeforeSent(ChannelContext, org.tio.core.intf.Packet, int)
     */
    @Override
    public void onAfterSent(ChannelContext<ImSessionContext, ImPacket, Object> channelContext, ImPacket packet, boolean isSentSuccess) {
        if (isSentSuccess) {
            CommandStat.getCount(packet.getCommand()).sent.incrementAndGet();
            System.out.println("发送完成");

//            Aio.send(channelContext, packet);
        }
    }

    /**
     * @param channelContext
     * @param packet
     * @param packetSize
     * @author: tanyaowu
     * 2016年12月20日 上午11:08:44
     * @see org.tio.core.intf.AioListener#onAfterReceived(ChannelContext, org.tio.core.intf.Packet, int)
     */
    @Override
    public void onAfterReceived(ChannelContext<ImSessionContext, ImPacket, Object> channelContext, ImPacket packet, int packetSize) {
        CommandStat.getCount(packet.getCommand()).received.incrementAndGet();
        System.out.println("接收完成");
    }

    /**
     * @param channelContext
     * @param throwable
     * @param remark
     * @author: tanyaowu
     * 2017年2月1日 上午11:03:11
     * @see org.tio.core.intf.AioListener#onAfterClose(ChannelContext, Throwable, String)
     */
    @Override
    public void onAfterClose(ChannelContext<ImSessionContext, ImPacket, Object> channelContext, Throwable throwable, String remark, boolean isRemove) {
        GroupContext a = channelContext.getGroupContext();
        System.out.println("关闭完成");
    }
}
